#| Installing and Loading the R packages
pacman:: p_load (sf, spatstat, tmap, tidyverse, rvest)
#| Data Import and Preparation
mpsz_sf <- st_read ("data/geospatial/MasterPlan2019SubzoneBoundaryNoSeaKML.kml" ) %>%
st_zm (drop = TRUE , what = "ZM" ) %>% st_transform (crs = 3414 )
Reading layer `URA_MP19_SUBZONE_NO_SEA_PL' from data source
`/Users/bryanbram/Documents/bryanbramaskara/ISSS626-GAA/hands-on-exercise/data/geospatial/MasterPlan2019SubzoneBoundaryNoSeaKML.kml'
using driver `KML'
Simple feature collection with 332 features and 2 fields
Geometry type: MULTIPOLYGON
Dimension: XY, XYZ
Bounding box: xmin: 103.6057 ymin: 1.158699 xmax: 104.0885 ymax: 1.470775
z_range: zmin: 0 zmax: 0
Geodetic CRS: WGS 84
#| Extracting KML data features
extract_kml_field <- function (html_text, field_name) {
if (is.na (html_text) || html_text == "" ) return (NA_character_ )
page <- read_html (html_text)
rows <- page %>% html_elements ("tr" )
value <- rows %>%
keep (~ html_text2 (html_element (.x, "th" )) == field_name) %>%
html_element ("td" ) %>%
html_text2 ()
if (length (value) == 0 ) NA_character_ else value
}
mpsz_sf <- mpsz_sf %>%
mutate (
REGION_N = map_chr (Description, extract_kml_field, "REGION_N" ),
PLN_AREA_N = map_chr (Description, extract_kml_field, "PLN_AREA_N" ),
SUBZONE_N = map_chr (Description, extract_kml_field, "SUBZONE_N" ),
SUBZONE_C = map_chr (Description, extract_kml_field, "SUBZONE_C" )
) %>%
select (- Name, - Description) %>%
relocate (geometry, .after = last_col ())
mpsz_cl <- mpsz_sf %>%
filter (SUBZONE_N != "SOUTHERN GROUP" ,
PLN_AREA_N != "WESTERN ISLANDS" ,
PLN_AREA_N != "NORTH-EASTERN ISLANDS" )
childcare_sf <- st_read ("data/geospatial/ChildCareServices.kml" ) %>%
st_zm (drop = TRUE , what = "ZM" ) %>%
st_transform (crs = 3414 )
Reading layer `CHILDCARE' from data source
`/Users/bryanbram/Documents/bryanbramaskara/ISSS626-GAA/hands-on-exercise/data/geospatial/ChildCareServices.kml'
using driver `KML'
Simple feature collection with 1925 features and 2 fields
Geometry type: POINT
Dimension: XYZ
Bounding box: xmin: 103.6878 ymin: 1.247759 xmax: 103.9897 ymax: 1.462134
z_range: zmin: 0 zmax: 0
Geodetic CRS: WGS 84
#| Mapping the geospatial data sets
tmap_mode ('view' )
tm_shape (childcare_sf)+
tm_dots ()
tmap_mode ('plot' )
#| Data Wrangling - Converting sf data frames to ppp class
childcare_ppp <- as.ppp (childcare_sf)
class (childcare_ppp)
Marked planar point pattern: 1925 points
Average intensity 2.417323e-06 points per square unit
Coordinates are given to 11 decimal places
Mark variables: Name, Description
Summary:
Name Description
Length:1925 Length:1925
Class :character Class :character
Mode :character Mode :character
Window: rectangle = [11810.03, 45404.24] x [25596.33, 49300.88] units
(33590 x 23700 units)
Window area = 796335000 square units
#| Data Wrangling - Creating owin object
sg_owin <- as.owin (mpsz_cl)
class (sg_owin)
#| Extracting study area
pg <- mpsz_cl %>%
filter (PLN_AREA_N == "PUNGGOL" )
tm <- mpsz_cl %>%
filter (PLN_AREA_N == "TAMPINES" )
ck <- mpsz_cl %>%
filter (PLN_AREA_N == "CHOA CHU KANG" )
jw <- mpsz_cl %>%
filter (PLN_AREA_N == "JURONG WEST" )
par (mfrow= c (2 ,2 ))
plot (st_geometry (pg), main = "Ponggol" )
plot (st_geometry (tm), main = "Tampines" )
plot (st_geometry (ck), main = "Choa Chu Kang" )
plot (st_geometry (jw), main = "Jurong West" )
#| Creating owin object
pg_owin = as.owin (pg)
tm_owin = as.owin (tm)
ck_owin = as.owin (ck)
jw_owin = as.owin (jw)
#| Combining point events object and owin object
childcare_pg_ppp = childcare_ppp[pg_owin]
childcare_tm_ppp = childcare_ppp[tm_owin]
childcare_ck_ppp = childcare_ppp[ck_owin]
childcare_jw_ppp = childcare_ppp[jw_owin]
childcare_pg_ppp.km = rescale.ppp (childcare_pg_ppp, 1000 , "km" )
childcare_tm_ppp.km = rescale.ppp (childcare_tm_ppp, 1000 , "km" )
childcare_ck_ppp.km = rescale.ppp (childcare_ck_ppp, 1000 , "km" )
childcare_jw_ppp.km = rescale.ppp (childcare_jw_ppp, 1000 , "km" )
par (mfrow= c (2 ,2 ))
plot (unmark (childcare_pg_ppp.km),
main= "Punggol" )
plot (unmark (childcare_tm_ppp.km),
main= "Tampines" )
plot (unmark (childcare_ck_ppp.km),
main= "Choa Chu Kang" )
plot (unmark (childcare_jw_ppp.km),
main= "Jurong West" )
#| Analysing Spatial Point Process Using G-Function
#| Choa Chu Kang planning area
#| Computing G-function estimation
set.seed (1234 )
G_CK = Gest (childcare_ck_ppp, correction = "border" )
plot (G_CK, xlim= c (0 ,500 ))
#| Performing Complete Spatial Randomness Test
G_CK.csr <- envelope (childcare_ck_ppp, Gest, nsim = 999 )
Generating 999 simulations of CSR ...
1, 2, 3, ......10.........20.........30.........40.........50.........60..
.......70.........80.........90.........100.........110.........120.........130
.........140.........150.........160.........170.........180.........190........
.200.........210.........220.........230.........240.........250.........260......
...270.........280.........290.........300.........310.........320.........330....
.....340.........350.........360.........370.........380.........390.........400..
.......410.........420.........430.........440.........450.........460.........470
.........480.........490.........500.........510.........520.........530........
.540.........550.........560.........570.........580.........590.........600......
...610.........620.........630.........640.........650.........660.........670....
.....680.........690.........700.........710.........720.........730.........740..
.......750.........760.........770.........780.........790.........800.........810
.........820.........830.........840.........850.........860.........870........
.880.........890.........900.........910.........920.........930.........940......
...950.........960.........970.........980.........990........
999.
Done.
plot (G_CK.csr)
#| Tampines planning area
#| Computing G-function estimation
G_tm = Gest (childcare_tm_ppp, correction = "best" )
plot (G_tm)
#| Performing Complete Spatial Randomness Test
G_tm.csr <- envelope (childcare_tm_ppp, Gest, correction = "all" , nsim = 999 )
Generating 999 simulations of CSR ...
1, 2, 3, ......10.........20.........30.........40.........50.........60..
.......70.........80.........90.........100.........110.........120.........130
.........140.........150.........160.........170.........180.........190........
.200.........210.........220.........230.........240.........250.........260......
...270.........280.........290.........300.........310.........320.........330....
.....340.........350.........360.........370.........380.........390.........400..
.......410.........420.........430.........440.........450.........460.........470
.........480.........490.........500.........510.........520.........530........
.540.........550.........560.........570.........580.........590.........600......
...610.........620.........630.........640.........650.........660.........670....
.....680.........690.........700.........710.........720.........730.........740..
.......750.........760.........770.........780.........790.........800.........810
.........820.........830.........840.........850.........860.........870........
.880.........890.........900.........910.........920.........930.........940......
...950.........960.........970.........980.........990........
999.
Done.
#| Analysing Spatial Point Process Using F-Function
#| Choa Chu Kang planning area
#| Computing F-function estimation
F_CK = Fest (childcare_ck_ppp)
plot (F_CK)
#| Performing Complete Spatial Randomness Test
F_CK.csr <- envelope (childcare_ck_ppp, Fest, nsim = 999 )
Generating 999 simulations of CSR ...
1, 2, 3, ......10.........20.........30.........40.........50.........60..
.......70.........80.........90.........100.........110.........120.........130
.........140.........150.........160.........170.........180.........190........
.200.........210.........220.........230.........240.........250.........260......
...270.........280.........290.........300.........310.........320.........330....
.....340.........350.........360.........370.........380.........390.........400..
.......410.........420.........430.........440.........450.........460.........470
.........480.........490.........500.........510.........520.........530........
.540.........550.........560.........570.........580.........590.........600......
...610.........620.........630.........640.........650.........660.........670....
.....680.........690.........700.........710.........720.........730.........740..
.......750.........760.........770.........780.........790.........800.........810
.........820.........830.........840.........850.........860.........870........
.880.........890.........900.........910.........920.........930.........940......
...950.........960.........970.........980.........990........
999.
Done.
plot (F_CK.csr)
#| Tampines planning area
#| Computing F-function estimation
F_tm = Fest (childcare_tm_ppp, correction = "best" )
plot (F_tm)
#| Performing Complete Spatial Randomness Test
F_tm.csr <- envelope (childcare_tm_ppp, Fest, correction = "all" , nsim = 999 )
Generating 999 simulations of CSR ...
1, 2, 3, ......10.........20.........30.........40.........50.........60..
.......70.........80.........90.........100.........110.........120.........130
.........140.........150.........160.........170.........180.........190........
.200.........210.........220.........230.........240.........250.........260......
...270.........280.........290.........300.........310.........320.........330....
.....340.........350.........360.........370.........380.........390.........400..
.......410.........420.........430.........440.........450.........460.........470
.........480.........490.........500.........510.........520.........530........
.540.........550.........560.........570.........580.........590.........600......
...610.........620.........630.........640.........650.........660.........670....
.....680.........690.........700.........710.........720.........730.........740..
.......750.........760.........770.........780.........790.........800.........810
.........820.........830.........840.........850.........860.........870........
.880.........890.........900.........910.........920.........930.........940......
...950.........960.........970.........980.........990........
999.
Done.
#| Analysing Spatial Point Process Using K-Function
#| Choa Chu Kang planning area
#| Computing K-fucntion estimate
K_ck = Kest (childcare_ck_ppp, correction = "Ripley" )
plot (K_ck, . - r ~ r, ylab= "K(d)-r" , xlab = "d(m)" )
#| Performing Complete Spatial Randomness Test
K_ck.csr <- envelope (childcare_ck_ppp, Kest, nsim = 99 , rank = 1 , glocal= TRUE )
Generating 99 simulations of CSR ...
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99.
Done.
plot (K_ck.csr, . - r ~ r, xlab= "d" , ylab= "K(d)-r" )
#| Tampines planning area
#| Computing K-fucntion estimation
K_tm = Kest (childcare_tm_ppp, correction = "Ripley" )
plot (K_tm, . - r ~ r,
ylab= "K(d)-r" , xlab = "d(m)" ,
xlim= c (0 ,1000 ))
#| Performing Complete Spatial Randomness Test
K_tm.csr <- envelope (childcare_tm_ppp, Kest, nsim = 99 , rank = 1 , glocal= TRUE )
Generating 99 simulations of CSR ...
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99.
Done.
plot (K_tm.csr, . - r ~ r,
xlab= "d" , ylab= "K(d)-r" , xlim= c (0 ,500 ))
#| Analysing Spatial Point Process Using L-Function
#| Choa Chu Kang planning area
#| Computing L Fucntion estimation
L_ck = Lest (childcare_ck_ppp, correction = "Ripley" )
plot (L_ck, . - r ~ r,
ylab= "L(d)-r" , xlab = "d(m)" )
#| Performing Complete Spatial Randomness Test
L_ck.csr <- envelope (childcare_ck_ppp, Lest, nsim = 99 , rank = 1 , glocal= TRUE )
Generating 99 simulations of CSR ...
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99.
Done.
plot (L_ck.csr, . - r ~ r, xlab= "d" , ylab= "L(d)-r" )
#| Tampines planning area
#| Computing L-fucntion estimate
L_tm = Lest (childcare_tm_ppp, correction = "Ripley" )
plot (L_tm, . - r ~ r,
ylab= "L(d)-r" , xlab = "d(m)" ,
xlim= c (0 ,1000 ))
#| Performing Complete Spatial Randomness Test
L_tm.csr <- envelope (childcare_tm_ppp, Lest, nsim = 99 , rank = 1 , glocal= TRUE )
Generating 99 simulations of CSR ...
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
99.
Done.
plot (L_tm.csr, . - r ~ r,
xlab= "d" , ylab= "L(d)-r" , xlim= c (0 ,500 ))